<?php

namespace Sm\AssBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Sm\AssBundle\Entity\Srt;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;

class AssController extends Controller {
    
    /*
     * Controller page d'accueil
     */

    public function homepageAction() {

        $repository = $this->getDoctrine()
                ->getManager()
                ->getRepository('SmAssBundle:Ass');

        $liste_ass = $repository->findAll();
              
        return $this->render('SmAssBundle:Ass:homepage.html.twig', array('liste_ass' => $liste_ass));
        
    }

    /**
     * @param type $id : id de l'ass
     * @return type view
     */

    public function viewAction($id) {

        //On récupère les informations de l'ass
        $repository = $this->getDoctrine()
                ->getManager()
                ->getRepository('SmAssBundle:Ass');

        $ass = $repository->find($id);
        
        $srts = $ass->getSrts();
        $styles = $ass->getStyles();
          
        return $this->render('SmAssBundle:Ass:view.html.twig', array(
            'ass' => $ass,
            'srts' => $srts,
            'styles' => $styles
            )
        );
    }

    /*
     * Import fichier .ass
     */

    public function importAction(Request $request) {

        // On crée un objet Ass
        $ass = new \Sm\AssBundle\Entity\Ass();
            
        // On crée le FormBuilder grâce à la méthode du contrôleur
        $formBuilder = $this->createFormBuilder($ass);

        // On ajoute les champs de l'entité que l'on veut à notre formulaire
        $formBuilder
                ->add('assfile', 'file', array('label' => 'Fichier ASS'))
                ->add('name', 'text', array('label' => 'Nom du fichier ASS', 'required' => false));

        // À partir du formBuilder, on génère le formulaire
        $form = $formBuilder->getForm();

        // On récupère la requête
        $request = $this->get('request');
        
        // On vérifie qu'elle est de type POST
        if ($request->getMethod() == 'POST') {
            
            $form->bind($request);
            
            if ($form->isValid()) {
                
                //Récupération du nom
                $assname = $ass->getAssfile()->getClientOriginalName();
                
                if($ass->getName() == '') {
                    $ass->setName($assname);
                }
                
                //On enregistre l'ass
                $em = $this->getDoctrine()->getManager();
                $em->persist($ass);

                $this->get('session')->getFlashBag()->set(
                    'success',
                    array(
                        'title' => 'Message : ',
                        'message' => 'Votre fichier a été importé avec succès !'
                    )
                );
                
                //On appelle le service Parser créé pour parser un ASS
                $parser = $this->get('parser');
                $parser->initParse($ass);
                $state = $parser->getState();
                
                $em->flush();
                
                if($state) {
                    return $this->redirect($this->generateUrl('sm_ass_home'));
                }
                
            }
        }
        return $this->render('SmAssBundle:Ass:import.html.twig', array('form' => $form->createView()));
    }
    
    /*
     * Fonction qui retourne un formulaire d'un sous-titre
     */
    public function formSrtAction($id) {
        
        $repositorySrt = $this->getDoctrine()
                ->getManager()
                ->getRepository('SmAssBundle:Srt');
        
        $srt = $repositorySrt->find($id);
        
        if($srt) {
            
            //On récupère le formulaire
            $form = $this->createForm('srt', $srt, array(
                'attr' => array(
                    'data-id' => $id,
                    'ass-id' => $srt->getAss()->getId()
                ),
            ));
           
            $formView = $this->renderView('SmAssBundle:Ass:form.srt.html.twig', array(
                'form' => $form->createView(),
                'id_srt' => $id
            ));
            
            return new JsonResponse(array('form' => $formView));

        }
    }
    
    /**
     * @ParamConverter("srt_id", class="SmAssBundle:Srt")
     */
    public function formSendAction(Srt $srt) {
        
        $request = $this->get('request');
        $form = $this->createForm('srt', $srt, array(
                'attr' => array(
                    'data-id' => $srt->getId(),
                    'ass-id' => $srt->getAss()->getId()
                ),
            ));
        
        if ($request->getMethod() == 'POST') {
            
            $form->bind($request);
            
            if ($form->isValid()) {
                
                $em = $this->getDoctrine()->getManager();
                $em->persist($srt);
                $em->flush();
                
                return new JsonResponse(array(
                    'success' => true,
                    'id' => $srt->getId(),
                    'content' => $srt->getContent(),
                    'start' => $srt->getStart(),
                    'end' => $srt->getEnd(),
                    'style' => $srt->getStyle()->getName()
                ));
                
            }
        }
        
        return new JsonResponse(array(
            'success' => false
        ));
        
    }
}